1. Field
The disclosure relates generally to USB hosts and peripheral devices, and more particularly, to apparatus and method for manipulating the support provided for USB by an operating system that is executed by a processor of a host to enable varying degrees of functionality in interactions between the host and a peripheral device attached to the host via USB interconnect.
2. Background Information
A number of years, ago, a group of computer and computer peripheral manufacturers formed an industry association to create a new digital interface for interconnecting various electronic devices. This new digital interface became and is widely known as USB (Universal Serial Bus). USB is a point-to-point interface in which there is a distinct master device (commonly referred to as a “host”) and a distinct slave device (commonly referred to as a “peripheral device”). USB is most commonly used to connect one or more peripheral devices (e.g., scanners, cameras, printers and removable media drives) to a single host device (usually, a computer system such as a personal computer).
USB permits electronic devices to be attached to each other, automatically configured upon detection of their attachment, and detached from each other while still in operation. In other words, USB provides “hot-plugging” support that includes automatic configuration. To facilitate this, specifications were drafted for minimum requirements for a protocol for the automatic configuration and for support to be provided by an operating system executed by a processor of the host for “on-the-fly” changes of peripheral devices, in addition to specifications for the hardware interface.
Upon attachment of a peripheral device to a host, the host requests and the peripheral device provides identification data, including a vendor identity code and one or more device class codes. Vendors of peripheral devices for USB are assigned identity codes to allow their products to be distinguished from those of other vendors. A number of device class codes are defined for USB with each device class code specifying a function that a peripheral device may be capable of performing, such as the human interface device class (e.g., keyboards, mice and joysticks), the printing device class (e.g., dot matrix printers, ink jet printers and color printers), the scanning device class (e.g., flatbed scanners), and the mass storage device class (e.g., hard disk drives, removable media drives and flash memory devices). A peripheral device may be capable of performing multiple functions, and therefore, would provide multiple device class codes in the identification information sent to the host.
The identification data is used by an operating system executed by a processor of the host to select one or more pieces of support software from whatever pieces of support software are loaded onto the host to support interactions between the host and the peripheral device to allow the host to make use of the functions specified by the peripheral device in its identification data. To aid the selection of pieces of support software, each piece of support software carries data that at least partially mirrors the types of information provided by identification data from a peripheral device. A piece of vendor-specific support software supports only the peripheral devices of a specific vendor and provides the operating system with a vendor identity code specifying that vendor, whereas generic support software is not limited to supporting only the peripheral devices of a specific vendor. Both vendor-specific and generic support software further provide the operating system with device class codes specifying what peripheral device functions are supported by the support software. It should be noted that it is possible for a piece of support software, whether vendor-specific or generic, to supports only a single peripheral device function or to support multiple functions. It is also possible that a piece of support software supports only a subset of the functions specified by device class codes of the identification data of a given peripheral device such that multiple pieces of support software must be selected to support all of the functions of that peripheral device.
In selecting support software to support interactions with each peripheral device attached to the host, the operating system endeavors to achieve the best fit between each peripheral device and whatever support software is loaded on the host. It is generally accepted that the best possible fit is achieved by matching a given peripheral device with vendor-specific support software that is of the same vendor and that supports all of the functions specified by the device class codes in the identification data supplied by that peripheral device (whether this is with a single piece of vendor-specific support software, or multiple pieces). This is based on the presumption that the vendor of a given peripheral device will be in the best position to provide software that best supports it. However, where either there is no vendor-specific support software specifying that vendor, or there is insufficient vendor-specific support software to support all of the functions of the given peripheral device, then the operating system may choose generic support software to support some or all of the functions of that peripheral device. However, if there proves not to be either vendor-specific or generic support software present to support all of the functions specified by a given peripheral device by the device class codes of its identification data, then the operating system presents the user with a request to load the missing support software onto the host.
Since the introduction of USB circa 1995, various trends have arisen in how computers or other electronic devices functioning as hosts to one or more attached peripheral devices are employed by their users, such as which vendors' peripheral devices and/or which peripheral device functions are more widely desired. Since it is generally not practical for a vendor of an electronic device functioning as a host to provide all known pieces of support software for all peripheral devices already loaded on those electronic devices, such vendors often attempt to anticipate which peripheral devices or peripheral device functions (i.e., which classes of peripheral device) are most likely to be desired by users, and to load onto their products a subset of support software sufficient to support those users. The result has been that some functions that a peripheral device may provide may be very widely supported with the necessary support software already being loaded onto the vast majority of hosts by their vendors such that few users are ever presented with a request to load software for such functions. However, this leaves other functions that a peripheral device may provide with less certainty in the availability of software support. Most users of computer systems or other electronic devices functioning as hosts to one or more attached devices will find themselves asked to load support software at some point.
Although many users of computer systems or other electronic devices functioning as hosts to one or more attached peripheral devices will understand the meaning of a request presented to them to load supporting software, many other users will not. Furthermore, actually satisfying such a request often entails a search for the requested software, either by searching for a storage medium (such as a CD) that accompanied the peripheral device when purchased or by searching for a website from which the requested software may be downloaded. Although operating systems making requests for support software to be loaded by a user is arguably the logic result of the necessary support software not already being loaded on a host, and is in fact the current conventional result, due to the inconvenience caused to both savvy and not-so-savvy users, this result is not seen as being entirely satisfactory.
Similar numerals refer to similar parts throughout the specification.